package com.bos.dao.impl;

import com.bos.dao.JumlahSiswaDAO;
import com.bos.domain.JumlahSiswa;
import com.bos.domain.Periode;
import com.bos.domain.Sekolah;
import com.bos.util.enums.JenjangSekolah;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 * User: Latief
 * Date: 3/15/11
 * Time: 9:13 PM
 * To change this template use File | Settings | File Templates.
 */
@Repository
public class JumlahSiswaDAOImpl extends GenericDAOImpl<JumlahSiswa> implements JumlahSiswaDAO {

    public JumlahSiswaDAOImpl() {
        super(JumlahSiswa.class);
    }

    public List<JumlahSiswa> getBySekolah(Sekolah sekolah) throws DataAccessException {
        return entityManager.createQuery("select o from " + type.getName() + " o where o.sekolah = :sekolah")
                .setParameter("sekolah", sekolah)
                .getResultList();
    }

    public List<JumlahSiswa> getByPeriode(Periode periode) throws DataAccessException {
        return entityManager.createQuery("SELECT o FROM " + type.getName() + " o WHERE o.periode = :periode")
                .setParameter("periode", periode)
                .getResultList();
    }

    public JumlahSiswa getBySekolahPeriode(Sekolah sekolah, Periode periode) throws DataAccessException {
        return (JumlahSiswa) entityManager.createQuery("SELECT o FROM " + type.getName() + " o WHERE o.sekolah = :sekolah AND o.periode = :periode")
                .setParameter("sekolah", sekolah)
                .setParameter("periode", periode)
                .getSingleResult();
    }

    public List<JumlahSiswa> getByJenjangSekolahPeriode(JenjangSekolah jenjangSekolah, Periode periode) throws DataAccessException {
        return entityManager.createQuery("SELECT o FROM " + type.getName() + " o WHERE o.sekolah.jenjangSekolah = :jenjangSekolah AND o.periode = :periode")
                .setParameter("jenjangSekolah", jenjangSekolah)
                .setParameter("periode", periode)
                .getResultList();
    }
}
